--[[
描述 ： 单行文本可移动控件
作者 ： 金阳
时间 ： 14/04/11
]]

MLListCellLabView = Class(MLView,'MLListCellLabView')

MLListCellLabView.Style_Common		= MLGraphics.Style_Common;
MLListCellLabView.Style_Bold			= MLGraphics.Style_Bold;

MLListCellLabView.tag					=nil;
MLListCellLabView.ALIGN_LEFT    		= 0;  	 -- 左对齐
MLListCellLabView.ALIGN_CENTER  		= 1; 		 -- 中对齐
MLListCellLabView.ALIGN_RIGHT   		= 2;  	 -- 右对齐
MLListCellLabView.id     		  		= nil;	 -- 唯一标识
MLListCellLabView.text   		  		= nil;	 -- 显示文本
MLListCellLabView.fontHeight    		= nil;	 -- 字体高度
MLListCellLabView.fontColor     		= nil;	 -- 字体背景颜色
MLListCellLabView.align         		= nil;	 -- 对齐方式

MLListCellLabView.viewCtrl      		= nil; 	 -- 所属viewCtrl

MLListCellLabView.mWidth        		= nil;     -- 宽度
MLListCellLabView.mHeight       		= nil;     -- 高度

MLListCellLabView.isAllowMoveShow     = nil;	 -- 是否滑动
MLListCellLabView.txtView       		= nil;	 -- 文字view
MLListCellLabView.tmpView       		= nil;	 -- 滑动时的临时文字view

MLListCellLabView.mDelay        		= nil;	 -- 类似定时器的开关控制

MLListCellLabView.mVSpace       		= nil;

MLListCellLabView.mIsDestory    		= nil;


--[[
功能   ： 初始化 UILabel 实例
参数   ： text  	   --  文本
         width     --  宽度
         height    --  高度
         viewCtrl  --  所属viewCtrl
返回   ： 窗体
]]

function MLListCellLabView:init(viewCtrl, labelTemplate,text,id)
	width  = labelTemplate.width or UITheme.LABEL_WIDTH;
	height = labelTemplate.height or UITheme.LABEL_HEIGHT;
	self.viewCtrl = viewCtrl;
	self:initView(width, height, viewCtrl, id);
	qtEvent[self.mHashcode] = self;
	self.text = text;
	self.mWidth = width;
	self.mHeight = height;
	self.tag = labelTemplate.tag;
	self.fontColor = labelTemplate.fontColor or UITheme.LABEL_FONT_COLOR;
	self.fontHeight = labelTemplate.fontHeight or UITheme.LABEL_FONT_HEIGHT;
	self.align = labelTemplate.align or UITheme.ALIGN_LEFT;

	-- 初始化
	self.fs = MLListCellLabView.Style_Common;
	self.isAllowMoveShow = false;
	self.tmpView = nil;
	self.mVSpace = nil;
	self.mIsDestory =  false;
	self:draw();
	return self;
end

--[[
功能   ： 设置文本
参数   ： text --- 文本
返回   ： 无
]]
function  MLListCellLabView:setText(text)
	self.text = text;
end


--[[
功能   ： 画控件
参数   ： text --- 文本
返回   ： 无
]]
function  MLListCellLabView:draw()
	if not self.text then return end
	local w, h = self:getWH();
	local strw = MLNative.measStringWidth(self.text, self.fontHeight, self.fs);

	--文字可以移动
	if self.isAllowMoveShow then
		--文字view
		self.txtView = MLView.new():initView(strw, h);
		self:add(self.txtView, 0, 0);
		local g = self.txtView:getGraphic();
        g:clear();
		g:drawString(self.text, 0, (h-self.fontHeight)/2, self.fontColor, self.fontHeight, self.fs);
		--首先文字view长度增加  AW(50) 为文字滚动重复时的中间间隔
		self.txtView:setWH(strw+AW(50), h);
		if (strw+AW(50) < w) then
			--文字长度小于屏幕长度
			self.txtView:setWH(w+AW(10), h);
			self.tmpView = MLView.new():initView(w+AW(10), h);
		else
			--文字长度大于、等于屏幕长度-AW(50)
			self.tmpView = MLView.new():initView(strw+AW(50), h);
		end
		--创建第二个文字view
		local g = self.tmpView:getGraphic();
        g:clear();
		g:drawString(self.text, 0, (h-self.fontHeight)/2, self.fontColor, self.fontHeight, self.fs);
		local offX = self.txtView:getWH();
		self:add(self.tmpView, offX, 0);

		-- MLNative.Delay(self, 'move', 1000);

		self.time = MLTimer:initTimer();
		self.time.onTimer = function ( )
			-- body
			if self.txtView and self.tmpView then
				local offX, offY = self.txtView:getXY();
				local offXX, offYY = self.tmpView:getXY();
				self.txtView:setXY(offX-10, offY);
				self.tmpView:setXY(offXX-10, offYY);

				local w, h = self.txtView:getWH();
				local ww, hh = self.tmpView:getWH()
				if offX+w < 0 then
					self.txtView:setXY(ww+offXX-10, offY);
				end
				if offXX+ww < 0 then
					self.tmpView:setXY(w+offX-10, offYY);
				end
				if self.mIsDestory then
					self.time:stop();
				end
				return;
			end
		end
		self.time:start(1000, true);


		if self.txtView == nil then
			-- self.mIsDestory = true;
		end
		if self.tmpView == nil then
			-- self.mIsDestory = true;
		end
	else 
		--不移动 处理 文字居中等效果
		local x, y = 0, (h-self.fontHeight)/2;
		if(strw >= w or self.align == self.ALIGN_LEFT) then
	    	x = 0;
		elseif self.align == self.ALIGN_CENTER then
			x = (w-strw)/2;
		elseif self.align == self.ALIGN_RIGHT then
			x = w-strw;
		end
		if strw > w then
			local lines = UIUtils.calcTextLine(self.text, w, 1, self.fontHeight, self.fs);
			self.text = lines[1];
		end
		local g = self:getGraphic();
        g:clear();
		g:drawString(self.text, x, y, self.fontColor, self.fontHeight, self.fs);
	end
end


--[[
功能   ： 显示控件
参数   ： 无
返回   ： 无
]]
function MLListCellLabView:show()
    self:draw();
end
--[[
功能   ： 更新控件
参数   ： 无
返回   ： 无
]]
function MLListCellLabView:update() 
	 self:draw();
end

--[[
功能   ： 控件摧毁，停止Delay
参数   ： 无
返回   ： 无
]]
function MLListCellLabView:onPause()
    if self.time then
       self.time:stop();
       self.time.onTimer = nil;
    end
    self.mIsDestory = true;
end

function MLListCellLabView:onDestroy(  )
   if self.time then
       self.time:stop();
       self.time.onTimer = nil;
    end
   	self.mIsDestory = true;
end


--[[
功能：  触摸笔事件监听函数
参数：  eventType	事件类型
参数：  x	 x 坐标
参数：  y	y 坐标
返回：  是否拦截此事件 true：拦截 false：不拦截
注解：  上层可重写此方法，来监听此事件
用法：   if eventType == View.PointDown then .... end
]]
function qt_event_point(hashcode, evt, x,y)	
	if qtEvent[hashcode]~=nil then
		if qtEvent[hashcode].onPoint ~=nil then
			return qtEvent[hashcode].onPoint(evt,x,y);
			else
				if qtEvent[hashcode].onClick ~=nil then
			 	return true;
			 else
				return false;
			 end
		end
	end
end

--[[
功能：  触摸笔点击事件监听函数
参数：	无	
返回：  无
注解：	层可重写此函数，来监听此事件
]] 
function qt_event_click(hashcode)
	if qtEvent[hashcode]~=nil then
		if qtEvent[hashcode].onClick ~=nil then
		   qtEvent[hashcode].onClick();
		end
	end
end
